#include "../../head.h"


/*
    消息队列使用前需要获取key值
*/

struct msgbuf   
{
    long mtype; // 类型（编号） 必须是long类型 int类型不行
    char mtext[1024]; //消息正文
};
void *thread_func(void *arg)
{
    sleep(3);
    // 创建存储消息的结构体
    struct msgbuf output;
    memset(&output, 0, sizeof(output));
    // 读取消息队列的内容
    int ret = msgrcv(*((int *)arg), &output,sizeof(output.mtext), 10, 0);
    printf("%s\n", output.mtext);
}
int main()
{
    printf("程序开始\n");
    // 获取key值
    key_t key = ftok(".", 10);
    //创建消息队列 成功返回消息队列id号
    int msgid =  msgget(key, IPC_CREAT | 0666);

    // 创建线程
    pthread_t thread;
    int ret = pthread_create(&thread, NULL, (void*)thread_func, &msgid);

    // 创建消息
    struct msgbuf data;
    memset(&data, 0, sizeof(data));

    data.mtype = 10;
    strcpy(data.mtext, "hello world");
    
    //写入
    int res = msgsnd(msgid, &data, sizeof(data.mtext), 0);
    if (res == -1)
    {
        perror("发送失败\n");
        return -1;
    }
    printf("发送成功\n");
    msgctl(msgid, IPC_RMID, NULL);
    sleep(5);
    printf("睡醒了\n");
    return 0;
}
